package com.jdcjk.project.car.view.baidu;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;

import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.TextureMapView;
import com.baidu.mapapi.model.LatLng;
import com.jdcjk.R;
import com.jdcjk.project.main.model.entity.CarWarningInfo;
import com.jdcjk.util.BaiDuMapUtil;

/**
 * Created by Administrator on 2017/2/20 0020.
 */

public class BDMapCarWarningDialog extends DialogFragment {
    private TextureMapView mMapView;
    private BaiduMap mBaiduMap;
    private LatLng warningLatlng;
    //缩放等级
    private float zoomLevel = 19;

    public BDMapCarWarningDialog() {
    }

    /**
     * 车辆报警位置
     *
     * @param carWarningInfo 车辆报警信息
     */
    public void setCarWarningInfo(CarWarningInfo carWarningInfo) {
        //坐标转换
        warningLatlng = BaiDuMapUtil.baiduLatLngEncrypt(new LatLng(carWarningInfo.getLatitude(), carWarningInfo.getLongitude()));
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View viewContent = inflater.inflate(R.layout.dialog_warning_baidu_map, container, false);
        //去掉dialog默认标题
        getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
        mMapView = (TextureMapView) viewContent.findViewById(R.id.car_warning_map);
        initMap();
        return viewContent;
    }

    //初始化地图
    private void initMap() {
        if (mBaiduMap == null) mBaiduMap = mMapView.getMap();
        mBaiduMap.setOnMapStatusChangeListener(new BaiduMap.OnMapStatusChangeListener() {
            @Override
            public void onMapStatusChangeStart(MapStatus mapStatus) {
                //手势操作地图，设置地图状态等操作导致地图状态开始改变。
            }

            @Override
            public void onMapStatusChange(MapStatus mapStatus) {
                //地图状态变化中
            }

            @Override
            public void onMapStatusChangeFinish(MapStatus mapStatus) {
                //地图状态改变结束
                zoomLevel = mapStatus.zoom;
            }
        });
        addWarningMarker(warningLatlng);
    }

    private Marker warningMarker;

    /**
     * 在对应位置添加报警标志物
     *
     * @param latLng 位置信息
     * @return
     */
    private Marker addWarningMarker(LatLng latLng) {
        // 创建标注物
        MarkerOptions markerOption = new MarkerOptions();
        // 设置地点位置（经纬度）
        markerOption.position(latLng);
        // 设置标注物是否可以拖拽（长按拖拽）
        markerOption.draggable(true);
        markerOption.icon(BitmapDescriptorFactory.fromResource(R.mipmap.ico_car_warning));//摩托车图标)
        // 添加标注物至地图显示
        if (warningMarker != null) {
            warningMarker.remove();//清除上一个标志物
        }
        // 生长动画
        markerOption.animateType(MarkerOptions.MarkerAnimateType.drop).zIndex(0).period(10);
        warningMarker = (Marker) (mBaiduMap.addOverlay(markerOption));
        animateToLocation(latLng);
        return warningMarker;
    }

    public void animateToLocation(LatLng latLng) {
        //定义地图状态
        MapStatus mMapStatus = new MapStatus.Builder()
                //要移动的点
                .target(latLng)
                //放大地图到20倍
                .zoom(zoomLevel)
                .build();
        //定义MapStatusUpdate对象，以便描述地图状态将要发生的变化
        MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
        //改变地图状态
        mBaiduMap.setMapStatus(mMapStatusUpdate);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mMapView.onDestroy();
    }

    @Override
    public void onResume() {
        super.onResume();
        mMapView.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
        mMapView.onPause();
    }

}
